<?php

class seguridad{

	private $id_sesion;
	private $id_usuario;
	private $usuario;
	private $password;
	private $nombre;
	private $apellido1;
	private $apellid2;
	private $cargo;
	private $id_tipo;
	private $id_tipo_mesa;
	private $tipo;
	private $activo;
	private $intentos=3;
	private $derechos=array();
	private $duracion_sesion = 3600; //3600 segundos son una hora.
	private $mesa;
	private $emesa;
	private $id_empresa;

	function __construct($user,$pass){
		$this->usuario=$user;
		$this->password=crypt(md5($pass), md5($pass));
	//	$this->password= md5($pass);
	}	

	function validarPass(){
		$user = consultaSimple("seguridad_usuarios su, seguridad_tipos st","su.id_tipo=st.id_tipo AND su.fecha_baja IS NULL AND su.activo=1 AND su.nombre_usuario = '".$this->usuario."'","","su.*, st.*");

		$this->intentos=$user["intentos"];



		if($this->password==$user["pass_usuario"]){
			$this->id_usuario=$user["id_usuario"];
			$this->id_tipo=$user["id_tipo"];
			$this->activo=$user["activo"];
			$this->nombre=$user["nombre"];
			$this->apellido1=$user["apellido1"];
			$this->apellido2=$user["apellido2"];
			$this->tipo=$user["tipo"];
			$this->cargo=$user["cargo"];
			$this->id_empresa = $user["id_empresa"];
			
			
			//Obtenemos todos sus derechos
			$tabla="seguridad_usuarios su, seguridad_derechos sd, seguridad_derecho_tipo sdt LEFT JOIN seguridad_derechos_opciones sdo ON sdt.id_opcion=sdo.id_opcion AND sdt.id_derecho=sdo.id_derecho";
			$where="sdt.id_derecho=sd.id_derecho AND sdt.id_tipo=su.id_tipo AND su.id_usuario=".$this->id_usuario;
			$der = consultaMultiple($tabla,$where,"","cadena_derecho, cadena_opcion");

			for($i=0;$i<count($der);$i++)
				$this->derechos[$der[$i]["cadena_derecho"]]=$der[$i]["cadena_opcion"];

			return true;
		}else{
			return false;
		}
	}

	function crearSesion(){

		// cerramos las sesiones anteriores
		$vector=array();
		$vector["fecha_limite"]=date("Y-m-d H:i:s");
		modificaBD("seguridad_sesiones",$vector,"id_usuario='".$this->id_usuario."' AND fecha_limite>'".date("Y-m-d H:i:s")."'");

		// y abrimos una nueva sesion
		$limite = mktime(date("H"),date("i"),date("s")+$this->duracion_sesion,date("m"),date("d"),date("Y"));						
		$vector=array();
		$vector["id_usuario"]=$this->id_usuario;
		$vector["fecha_entrada"]=date("Y-m-d H:i:s");
		$vector["fecha_limite"]=date("Y-m-d H:i:s",$limite);
		$vector["ip"]=$_SERVER[REMOTE_ADDR];
		$vector["id_sesion"]=$this->id_sesion=$this->generarIdSesion();
		$vector["sistema"]=$_SERVER["HTTP_USER_AGENT"];
		insertaBD("seguridad_sesiones",$vector);
	}

	function eliminarSesion(){

		// cerramos las sesiones anteriores
		$vector=array();
		$vector["fecha_limite"]=date("Y-m-d H:i:s");
		modificaBD("seguridad_sesiones",$vector,"id_usuario='".$this->id_usuario."'");
	}

	function generarIdSesion(){

		$unico = false;
		while (!$unico){
			$id_tmp = $this->hash_aleatorio(50);
			$vector = consultaMultiple("seguridad_sesiones","id_sesion= '".$id_tmp."'");

			if(count($vector)==0){
				$unico=true;
			}
		};
		return $id_tmp;
	}

	function restarIntentos(){
		$this->intentos--;

		if($this->intentos>0){
			$vector=array();
			$vector["intentos"]=$this->intentos;
			modificaBD("seguridad_usuarios",$vector,"nombre_usuario='".$this->usuario."'");
		}else{
			$vector=array();
			$vector["intentos"]=$this->intentos="0";
			$vector["activo"]=$this->activo="0";
			modificaBD("seguridad_usuarios",$vector,"nombre_usuario='".$this->usuario."'");
		}
	}

	function restablecerIntentos(){
		$vector=array();
		$vector["intentos"]=$this->intentos=3;

		modificaBD("seguridad_usuarios",$vector,"nombre_usuario = '".$this->usuario."'");
	}

	function getIntentos(){
		return $this->intentos;
	}

	function getMesa(){
		return $this->mesa;
	}
	
	function setMesa($value){
		$this->mesa = $value;
	}


	function getActivo(){
		return $this->activo;
	}		

	function getTipo(){
		return $this->tipo;
	}		

	function getIdTipo(){
		return $this->id_tipo;
	}		

	function getIdUsuario(){
		return $this->id_usuario;
	}		


	function getNombreCompleto(){
		return $this->nombre." ".$this->apellido1." ".$this->apellido2;
	}		

	function getNombre(){
		return $this->nombre." ".$this->apellido1;	
	}

	function getCargo(){
		return $this->cargo;
	}		

	
	function compruebaDerecho($var){
		if(array_key_exists($var,$this->derechos))
			return true;
		else
			return false;
	}

	function compruebaOpcion($der,$op){
		if(!$this->compruebaDerecho($der) || empty($this->derechos[$der]) || $this->derechos[$der]!=$op)
			return false;
		
		return true;
	}

	function getDerechoOpcion($der){
		return $this->derechos[$der];
	}
	
	function getemesa()
	{
		return $this->emesa;
	}
	
	function getid_empresa()
	{
		return $this->id_empresa;
	}
	
	function setIdTipoMesa($id_tipo)
	{
		$this->id_tipo_mesa = $id_tipo;
	}
	
	function getIdTipoMesa()
	{
		return $this->id_tipo_mesa;
	}
	
	function setemesa($emesa)
	{
		$this->emesa = $emesa;
	}
	
	function compruebaSesion(){														
		if($this->id_sesion=="")
			return false;			
					
		$sesiones = consultaMultiple("seguridad_sesiones","id_sesion='".$this->id_sesion."' AND fecha_limite>='".date("Y-m-d H:i:s")."'");
		if(count($sesiones)>0){
			// aumentamos el credito
			$limite = mktime(date("H"),date("i"),date("s")+$this->duracion_sesion,date("m"),date("d"),date("Y"));

			$vector = array();
			$vector["fecha_limite"] = date("Y-m-d H:i:s",$limite);
			modificaBD("seguridad_sesiones",$vector,"id_sesion='".$this->id_sesion."'");

			return true;
		}else{
			return false;
		}
	}

	function compruebaAcceso($der){
		if($this->compruebaSesion() && $this->compruebaDerecho($der))
			return true;
		else
			return false;
	}

	function hash_aleatorio($longitud){
		$resultado="";
	
		if ($longitud>0){
			srand ((double)microtime()*1000000);
				
			for ($contador=0;$contador<$longitud;$contador++){
					$numero=rand () % 24;
				
					if ($numero<=9){														
						$resultado.=$numero;					
					}else{
						if ($numero==10)
							$resultado.="A";
						if ($numero==11)
							$resultado.="B";
						if ($numero==12)
							$resultado.="C";
						if ($numero==13)
							$resultado.="D";
						if ($numero==14)
							$resultado.="E";
						if ($numero==15)
							$resultado.="F";
						if ($numero==16)
							$resultado.="G";
						if ($numero==17)
							$resultado.="H";
						if ($numero==18)
							$resultado.="I";
						if ($numero==19)
							$resultado.="J";
						if ($numero==20)
							$resultado.="K";
						if ($numero==21)
							$resultado.="L";
						if ($numero==22)
							$resultado.="M";
						if ($numero==23)
							$resultado.="N";																												
					}							
			}	    
		}
		return $resultado; 
	}

/*	function __destruct() {
		$this->eliminarSesion();
	}*/
}
?>
